package com.coderg.gmall.product.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coderg.gmall.common.result.Result;
import com.coderg.gmall.model.product.BaseAttrInfo;
import com.coderg.gmall.product.mapper.BaseAttrInfoMapper;
import com.coderg.gmall.product.service.BaseAttrInfoService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description
 * @Author CoderG
 * @Date 2025/5/16 0:17
 **/
@Service
@Transactional(rollbackFor = Exception.class)
public class BaseAttrInfoServiceImpl implements BaseAttrInfoService {

    @Resource
    BaseAttrInfoMapper baseAttrInfoMapper;

    /**
     * 查询所有数据
     *
     * @return
     */
    @Override
    public List<BaseAttrInfo> findAll() {
        return baseAttrInfoMapper.selectList(null);
    }

    /**
     * 通过id查询
     *
     * @param id
     * @return
     */
    @Override
    public BaseAttrInfo selectById(Long id) {
        if (id <= 0) {
            return null;
        }
        BaseAttrInfo baseAttrInfo = baseAttrInfoMapper.selectById(id);
        return baseAttrInfo;
    }

    /**
     * 新增
     *
     * @param baseAttrInfo
     * @return
     */
    @Override
    public Result<Object> insert(BaseAttrInfo baseAttrInfo) {
        //参数校验
        if (baseAttrInfo == null ||
                StringUtils.isEmpty(baseAttrInfo.getAttrName())) {
            throw new RuntimeException("参数错误");
        }
        int result = baseAttrInfoMapper.insert(baseAttrInfo);
        if (result <= 0) {
            throw new RuntimeException("新增失败");
        }
        return Result.ok();
    }

    /**
     * 修改
     *
     * @param baseAttrInfo
     */
    @Override
    public void update(BaseAttrInfo baseAttrInfo) {
        if (baseAttrInfo == null ||
                StringUtils.isEmpty(baseAttrInfo.getAttrName())) {
            throw new RuntimeException("参数错误");
        }
        int result = baseAttrInfoMapper.updateById(baseAttrInfo);
        if (result < 0) {
            throw new RuntimeException("修改失败");
        }
    }

    /**
     * 删除
     *
     * @param id
     */
    @Override
    public void delete(Long id) {
        if (id <= 0) {
            throw new RuntimeException("参数错误");
        }
        int delete = baseAttrInfoMapper.deleteById(id);

        if (delete < 0) {
            throw new RuntimeException("删除失败!");
        }
    }

    /**
     * 条件查询
     *
     * @param baseAttrInfo
     * @return
     */
    @Override
    public List<BaseAttrInfo> selectByCondition(BaseAttrInfo baseAttrInfo) {

        LambdaQueryWrapper<BaseAttrInfo> wrapper = creatCondition(baseAttrInfo);

        List<BaseAttrInfo> baseAttrInfos =
                baseAttrInfoMapper.selectList(wrapper);

        return baseAttrInfos;
    }

    /**
     * 分页查询
     *
     * @param page
     * @param size
     * @return
     */
    @Override
    public IPage<BaseAttrInfo> selectByPage(Integer page, Integer size) {
        if (page == null || page < 0 || size == null || size <= 0) {
            page = 1;
            size = 10;
        }
        Page<BaseAttrInfo> iPage = new Page<>(page, size);

        return baseAttrInfoMapper.selectPage(iPage, null);

    }

    /**
     * 分页条件查询
     *
     * @param page
     * @param size
     * @param baseAttrInfo
     * @return
     */
    @Override
    public IPage<BaseAttrInfo> selectByPage(Integer page, Integer size, BaseAttrInfo baseAttrInfo) {

        if (page == null || page < 0 || size == null || size <= 0) {
            page = 1;
            size = 10;
        }
        Page<BaseAttrInfo> iPage = new Page<>(page, size);
        LambdaQueryWrapper<BaseAttrInfo> wrapper = creatCondition(baseAttrInfo);
        return baseAttrInfoMapper.selectPage(iPage, wrapper);
    }

    private LambdaQueryWrapper<BaseAttrInfo> creatCondition(BaseAttrInfo baseAttrInfo) {
        if (baseAttrInfo == null ||
                StringUtils.isEmpty(baseAttrInfo.getAttrName())) {
            throw new RuntimeException("参数错误");
        }
        LambdaQueryWrapper<BaseAttrInfo> wrapper =
                new LambdaQueryWrapper<>();

        if (baseAttrInfo.getId() != null) {
            wrapper.eq(BaseAttrInfo::getId, baseAttrInfo.getId());
        }
        if (!StringUtils.isEmpty(baseAttrInfo.getAttrName())) {
            wrapper.like(BaseAttrInfo::getAttrName, baseAttrInfo.getAttrName());
        }
        if (baseAttrInfo.getCategoryId() != null && baseAttrInfo.getCategoryId() > 0) {
            wrapper.eq(BaseAttrInfo::getCategoryId, baseAttrInfo.getCategoryId());
        }
        return wrapper;
    }
}
